Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Mssql Image (ExHealer)
Author Message
ExHealer
Участник форума



Joined: 07 Dec 2004
Posts: 73
Карма: 7
   поощрить/наказать


PostPosted: Mon Jan 16, 2006 7:46 pm (написано за 36 секунд)
   Post subject: Mssql Image
Reply with quote

Mssql Image
Вот какая проблема возникла.

1. Есть база данных mssql
2. В ней создано поле типа Image.
3. Картинка в это поле вносится посредством Access.
4. На php написан скрипт который читает эту картинку из mssql.

Проблема состоит в том, что картинка читается из базы в неизвестном формате.

Путем долгой медитации над поиском удалось найти только упоминание о том что данные в поле Image хранятся в виде OLE контейнера.

Вопрос, как вывести эту злосщастную картинку посредством php?

p.s. Если добавлять данные напрямую, INSERT бла-бла-бла и потом делать SELECT, то всё замечательно работает. Т.е. проблема проявляется только когда данные вносятся через Access.

p.s.s. Картинку можно скачать www.artvisio.com/ftp/unknownimage

Заранее большое спасибо!
Back to top
View user's profile Send private message
sl_user
Guest





Карма: 388
   поощрить/наказать


PostPosted: Wed Jan 18, 2006 4:16 pm (спустя 1 день 20 часов 30 минут; написано за 44 секунды)
   Post subject:
Reply with quote

а у поля image в базе, какой тип (точнее трансформация броузера - это упоминается в phpmyadmin)?
Back to top
Guest






Карма: 388
   поощрить/наказать


PostPosted: Thu Jan 19, 2006 3:53 am (спустя 11 часов 36 минут; написано за 33 секунды)
   Post subject:
Reply with quote

Уважаемый!
Какой phpmyadmin?
Это же mssql, а не mysql.
Back to top
ExHealer
Участник форума



Joined: 07 Dec 2004
Posts: 73
Карма: 7
   поощрить/наказать


PostPosted: Sat Jan 21, 2006 4:01 am (спустя 2 дня 8 минут; написано за 1 минуту 24 секунды)
   Post subject:
Reply with quote

Проблема решена.
Начиная с 57 байта в файле находится обыкновенный BITMAPINFOHEADER.
Добавить только заголовок и всё замечательно.
Back to top
View user's profile Send private message
KByte
Guest





Карма: 388
   поощрить/наказать


PostPosted: Sat Apr 22, 2006 4:21 pm (спустя 3 месяца 1 день 12 часов 20 минут; написано за 23 секунды)
   Post subject:
Reply with quote

На php.net в примере - 78 байт.
В прочем у меня не работает ни так ни так =(
Back to top
Guest






Карма: 388
   поощрить/наказать


PostPosted: Fri May 05, 2006 6:17 pm (спустя 13 дней 1 час 55 минут; написано за 3 минуты 36 секунд)
   Post subject:
Reply with quote

Добился примерной работоспособности вот таким кодом, осталась проблема.
База отдает только 64512 байт данных.
Работаю из Linux через FreeTDS.

Если кто-нибуть реализовал всё по человечески, пожалуйста отпишитесь туту или на byte[dot]root[at]gmail[dot]com
Code (php): скопировать код в буфер обмена
<?php
function error_img(){
$error_img = file_get_contents (www.php.net/file_get_contents)('error.bmp');
echo (www.php.net/echo) $error_img;
exit (www.php.net/exit)();
}

header (www.php.net/header)("Content-type: image/bmp");

if(isset (www.php.net/isset)($_GET['id'])){

$id = intval (www.php.net/intval)(htmlspecialchars($_GET['id']));

$msconnect=mssql_connect("MyServer2k","*****","*****") or error_img();
$msdb=mssql_select_db("pictures",$msconnect);
$msquery = "select pic from dbo.pic where pic_ID = ".$id;
$msresults = mssql_query($msquery);

if($msresults){

$row = mssql_fetch_row($msresults);
$pos = strpos (www.php.net/strpos)($row[0],"DIB");
if($pos === false) {
$imgdata = 'BM'.substr($row[0],190);
}else{
$imgdata = 'BM'.substr($row[0],$pos+4);
}
$imgsize = strlen (www.php.net/strlen)($imgdata);
$imgdata[3] = chr (www.php.net/chr)(($imgsize&0xFF00)>>8);
$imgdata[2] = chr (www.php.net/chr)($imgsize&0xFF);
$imgdata[5] = chr (www.php.net/chr)(($imgsize&0xFF0000)>>16);
$imgdata[4] = chr (www.php.net/chr)(($imgsize&0xFF000000)>>24);
$imgdata[0x0a] = chr (www.php.net/chr)(0x36);
$imgdata[0x0e] = chr (www.php.net/chr)(0x28);
$imgdata[0x26] = chr (www.php.net/chr)(0x12); // resolution by defalut
$imgdata[0x27] = chr (www.php.net/chr)(0x0B);
$imgdata[0x2A] = chr (www.php.net/chr)(0x12);
$imgdata[0x2B] = chr (www.php.net/chr)(0x0B);
$imgdata[0x6] = chr (www.php.net/chr)(0);
$imgdata[0x7] = chr (www.php.net/chr)(0);
$imgdata[0x8] = chr (www.php.net/chr)(0);
$imgdata[0x9] = chr (www.php.net/chr)(0);
$imgdata[0xB] = chr (www.php.net/chr)(0); //
$imgdata[0xC] = chr (www.php.net/chr)(0);
$imgdata[0xD] = chr (www.php.net/chr)(0);
echo (www.php.net/echo) $imgdata;
mssql_free_result($msresults);
}else
{
error_img();
}

mssql_close ($msconnect);
}else
{
error_img();
}
?>
Back to top
Guest






Карма: 388
   поощрить/наказать


PostPosted: Fri May 05, 2006 6:51 pm (спустя 33 минуты; написано за 30 секунд)
   Post subject:
Reply with quote

mssql_textlimit и mssql_textsize решили проблему =)
Back to top
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML